/*
  注意：
        1. 拦截器只对非 tabbar 页面生效;
        2. 使用 navigateTo 组件拦截不生效
        3. 有权限的页面需要使用  uni.navigateTo 跳转
* */
import { useStore } from '@/store';
// 白名单
const permissionList: string[] = ['/pages/login/login'];

/**
 * 检查是否有权限访问指定URL
 * @param url 要访问的页面路径
 * @returns 是否有访问权限
 */
function hasPermission(url: string): boolean {
  // 从本地存储获取token
  const userInfoStore = useStore();
  const token: boolean = !!userInfoStore.userInfo?.token;
  const isPublicPage: boolean = permissionList.includes(url);
  // 权限逻辑：
  // - 已登录用户可以访问所有页面
  // - 未登录用户只能访问白名单页面
  return token || isPublicPage;
}

uni.addInterceptor('navigateTo', {
  // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转
  invoke(e: UniApp.RequestOptions) {
    if (!hasPermission(e.url)) {
      uni.navigateTo({
        url: '/pages/login/login',
      });
      return false;
    }
    return true;
  },
  success(e: UniApp.RequestOptions) {
    if (e) {
    }
    // 可以在这里添加跳转成功后的处理逻辑
  },
});
